﻿using System;
using System.Data;
using System.Windows.Forms;

//namespace Gescan.frm
//{
public partial class frmCajaDiaria : frmBase
{
    DataRow DrUltimoRegistroCaja;
    // DataTable dtTiposPago;
    //
    public frmCajaDiaria() { InitializeComponent(); TipoShowForm = clsVariables.eTipoShowForm.ShowDialog; }
    //
    private void frmCajaDiaria_Load(object sender, EventArgs e)
    {
        lbldesgtosticketdiario.Text = "(Factura efectivo + Tickets efectivo del día)";  //Gtos Ticket diario
        lbldesGtosCajaDiario.Text = "(Ticket caja + Factura caja del día)";  // Gtos caja diario 
        lbldestotalcajadiario.Text = "(Efectivo caja última hora - Efectivo caja mañana)";//Total caja diario
        lbldesTotalBcoDiario.Text = "(Estado caja última hora - Estado caja primera hora)";
        lbldesSaldoRetenido.Text = "(Suma de los a cta. en negativo de los socios)";
        lbldesTotalGastosDiaria.Text = "(Suma de los gastos del día)";
        lbldesSaldoBanco.Text = "(Estado cta. 1ª hora del día - gastos de tipo bancario)";

        try
        {
            //this.IsMdiChild=false;
            //this.MdiParent = null;
            //this.MdiParent = this;                   
            //
            datFechaCajaInicial.Value = DateTime.Now.ToString("dd/MM/yyyy");
            datFechaCajaFinal.Value = DateTime.Now.ToString("dd/MM/yyyy");
            CargarImagenesBotones();
            btnConsultar_Click(null, null);
            //CargarValores Lo carga el evento del cambio del combo
        }
        catch (Exception ex)
        { Utiles.Errores.LanzarError(this, "<Load>", "", ex, MessageBoxIcon.Exclamation, true); }

    }
    //
    private void CargarImagenesBotones()
    {
        rRetiradaCannabis.Image = clsImagenes.Refrescar;
        rRetiradaMateriales.Image = clsImagenes.Refrescar;
        rRetiradaTinturas.Image = clsImagenes.Refrescar;
        rRetiradaHachis.Image = clsImagenes.Refrescar;
        rRetiradaEsquejes.Image = clsImagenes.Refrescar;
        rGtosTicketDiario.Image = clsImagenes.Refrescar;
        rTotalCajaDiario.Image = clsImagenes.Refrescar;
        rGtosCajaDiario.Image = clsImagenes.Refrescar;
        rTotalBcoDiario.Image = clsImagenes.Refrescar;
        rSaldoRetenido.Image = clsImagenes.Refrescar;
        rTotalGastosDiaria.Image = clsImagenes.Refrescar;
        rSaldoBanco.Image = clsImagenes.Refrescar;
    }
    //
    private void CargarValores(object sender, EventArgs e)
    {
        //Inferior
        rTotalCajaDiario_Click(sender, e); rTotalBcoDiario_Click(sender, e);
        rGtosTicketDiario_Click(sender, e); rGtosCajaDiario_Click(sender, e);
        //Superior
        rRetiradaCannabis_Click(sender, e); rRetiradaMateriales_Click(sender, e);
        rRetiradaTinturas_Click(sender, e); rRetiradaHachis_Click(sender, e); rRetiradaEsquejes_Click(sender, e);
        rSaldoRetenido_Click(sender, e); rTotalGastosDiaria_Click(sender, e); rSaldoBanco_Click(sender, e);
    }
    //
    //Parte inferior
    private void rGtosTicketDiario_Click(object sender, EventArgs e)
    {
        string strSql = "Select sum(importe) from gastos " +
            " Where (idtipospago =" + (Int16)clsVariablesGescan.e_TiposPago.FtaEfectivo +
            " Or idtipospago =" + (Int16)clsVariablesGescan.e_TiposPago.TicketEfectivo +
            " ) And fechagasto = '" + clsBBDD.TransformDate(datFechaCajaInicial.Value, true) + "'";
        double dblImporte = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        lblGtosticketdiario.Text = dblImporte.ToString();
        p_CheckColorLabel(ref lblGtosticketdiario);
    }
    //
    private void rGtosCajaDiario_Click(object sender, EventArgs e)
    {
        string strSql = "Select sum(importe) from gastos " +
           " Where (idtipospago =" + (Int16)clsVariablesGescan.e_TiposPago.Caja +
           " Or idtipospago =" + (Int16)clsVariablesGescan.e_TiposPago.FtaCaja +
           " ) And fechagasto = '" + clsBBDD.TransformDate(datFechaCajaInicial.Value, true) + "'";
        double dblImporte = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        lblGtosCajaDiario.Text = dblImporte.ToString();
        p_CheckColorLabel(ref lblGtosCajaDiario);
    }
    //
    private void rTotalCajaDiario_Click(object sender, EventArgs e)
    {
        if (DrUltimoRegistroCaja != null)
        {
            lblTotalcajadiario.Text = ((double)DrUltimoRegistroCaja["efectivocajaulthora"] -
                (double)DrUltimoRegistroCaja["efectivocajamanyana"]).ToString();
        }
        { lblTotalcajadiario.Text = "0"; }
        p_CheckColorLabel(ref lblTotalcajadiario);
    }
    //
    private void rTotalBcoDiario_Click(object sender, EventArgs e)
    {
        if (DrUltimoRegistroCaja != null)
        {
            lblTotalBcoDiario.Text = ((double)DrUltimoRegistroCaja["estadoctaulthora"] -
                (double)DrUltimoRegistroCaja["estadocta1hora"]).ToString();
        }
        else { lblTotalBcoDiario.Text = "0"; }
        p_CheckColorLabel(ref lblTotalBcoDiario);
    }
    //
    private void rSaldoRetenido_Click(object sender, EventArgs e)
    {
        Label lblObjetivo = lblSaldoRetenido;
        string strSql = " Select SUM(ingreso) - sum(cantidadretirada * precioretirado)  from visretiradas Where 1=1 ";
        p_CheckFechaFinal(ref strSql, "fecharetirada");
        double dblImporte = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        lblObjetivo.Text = dblImporte.ToString(); p_CheckColorLabel(ref lblObjetivo);
    }
    //
    private void rTotalGastosDiaria_Click(object sender, EventArgs e)
    {
        Label lblObjetivo = lblTotalGastosDiaria;
        string strSql = " Select sum(importe) from gastos Where 1=1 ";
        p_CheckFechaFinal(ref strSql, "fechagasto");
        double dblImporte = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        lblObjetivo.Text = dblImporte.ToString(); p_CheckColorLabel(ref lblObjetivo);
    }
    //
    private void rSaldoBanco_Click(object sender, EventArgs e)
    {
        Label lblObjetivo = lblSaldoBanco;
        //Gtos tipo bancario
        string strSql = " select sum( vg.importe) FROM visgastos vg where boltipobancario = 1 ";
        p_CheckFechaFinal(ref strSql, "fechagasto");
        double dblImporteGastos = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        //Estado caja 1a hora
        strSql = " select c.estadocta1hora  from caja c where 1=1 ";
        p_CheckFechaFinal(ref strSql, "fechacaja");
        double dblImporteCaja = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        //Balance de las retiradas
        strSql = " select sum(vr.actaactual) FROM visretiradas vr where 1=1 ";
        p_CheckFechaFinal(ref strSql, "fecharetirada");
        double dblBalanceREtiradas = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        //Total
        lblObjetivo.Text = (dblImporteCaja + dblBalanceREtiradas - dblImporteGastos).ToString(); 
        p_CheckColorLabel(ref lblObjetivo);
    }
    //
    //
    //Parte superior
    private void rRetiradaCannabis_Click(object sender, EventArgs e)
    {
        Label lblObjetivo = lblRetiradaCannabis;
        string strSql = " select sum(ingreso) from retiradas where idtiposretiradas=" +
                        (Int16)clsVariablesGescan.e_TiposRetiradas.Cannabis;
        p_CheckFechaFinal(ref strSql, "fecharetirada");
        double dblImporte = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        lblObjetivo.Text = dblImporte.ToString(); p_CheckColorLabel(ref lblObjetivo);
    }

    private void rRetiradaMateriales_Click(object sender, EventArgs e)
    {
        Label lblObjetivo = lblRetiradaMateriales;
        string strSql = " select sum(ingreso) from retiradas where idtiposretiradas=" +
                        (Int16)clsVariablesGescan.e_TiposRetiradas.Materiales;
        p_CheckFechaFinal(ref strSql, "fecharetirada");
        double dblImporte = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        lblObjetivo.Text = dblImporte.ToString(); p_CheckColorLabel(ref lblObjetivo);
    }

    private void rRetiradaTinturas_Click(object sender, EventArgs e)
    {
        Label lblObjetivo = lblRetiradaTinturas;
        string strSql = "select sum(ingreso) from retiradas where idtiposretiradas=" +
                        (Int16)clsVariablesGescan.e_TiposRetiradas.Tinturas;
        p_CheckFechaFinal(ref strSql, "fecharetirada");
        double dblImporte = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        lblObjetivo.Text = dblImporte.ToString(); p_CheckColorLabel(ref lblObjetivo);
    }

    private void rRetiradaHachis_Click(object sender, EventArgs e)
    {
        Label lblObjetivo = lblRetiradaHachis;
        string strSql = "select sum(ingreso) from retiradas where idtiposretiradas=" +
            (Int16)clsVariablesGescan.e_TiposRetiradas.Hachis;
        p_CheckFechaFinal(ref strSql, "fecharetirada");
        double dblImporte = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        lblObjetivo.Text = dblImporte.ToString(); p_CheckColorLabel(ref lblObjetivo);
    }

    private void rRetiradaEsquejes_Click(object sender, EventArgs e)
    {
        Label lblObjetivo = lblRetiradaEsquejes;
        string strSql = "select sum(ingreso) from retiradas where idtiposretiradas=" +
           (Int16)clsVariablesGescan.e_TiposRetiradas.Esquejes;
        p_CheckFechaFinal(ref strSql, "fecharetirada");
        double dblImporte = clsBBDD.ObtenerDouble(strSql, clsVariables.e_TipoOrigen.Cliente, 0);
        lblObjetivo.Text = dblImporte.ToString(); p_CheckColorLabel(ref lblObjetivo);
    }
    
    //
    private void p_CheckFechaFinal(ref string strSql, string strCampo)
    {
        strSql += String.Format(" And  {0} >= '{1}' ", strCampo, clsBBDD.TransformDate(datFechaCajaInicial.Value, true));
        strSql += String.Format(" And  {0} <='{1}' ", strCampo, clsBBDD.TransformDate(datFechaCajaFinal.Value, true));
    }
    //
    private void p_CheckColorLabel(ref Label lblObjetivo)
    {
        if (Convert.ToDouble(lblObjetivo.Text) > 0) { lblObjetivo.ForeColor = System.Drawing.Color.Blue; } //color
        else { lblObjetivo.ForeColor = System.Drawing.Color.Red; }
    }

    /// <summary>
    /// EL user inserta un registro de caja. Algunos cálculos utilizan ese registro de caja... 
    /// Lo recupero según fecha y lo hago servir en algunos cálculos
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnConsultar_Click(object sender, EventArgs e)
    {
        DataTable Dt;
        DrUltimoRegistroCaja = null;
        string strSql = String.Format(" Select * from caja Where fechacaja >='{0}' ", clsBBDD.TransformDate(datFechaCajaInicial.Value));  // ORDER BY idcaja DESC limit 1";
        p_CheckFechaFinal(ref strSql, "fechacaja");
        Dt = clsBBDD.DtObtener(strSql, clsVariables.e_TipoOrigen.Cliente, false);
        if (Dt.Rows.Count > 0) { DrUltimoRegistroCaja = Dt.Rows[0]; }
        //else
        //{
        //    lblRetiradaCannabis.Text = "0"; lblRetiradaMateriales.Text = "0";
        //    lblRetiradaTinturas.Text = "0"; lblRetiradaHachis.Text = "0";
        //    lblRetiradaEsquejes.Text = "0";
        //    //lblGtosticketdiario.Text = "0"; lblGtosCajaDiario.Text = "0";
        //    //lblTotalcajadiario.Text = "0";  lblTotalBcoDiario.Text = "0"; 
        //    DrUltimoRegistroCaja = null;
        //}
        CargarValores(sender, e);
    }
    //
    private void CheckFechas(object sender, EventArgs e)
    {
        if (datFechaCajaFinal.Value == null || (DateTime)(datFechaCajaFinal.Value) < (DateTime)(datFechaCajaInicial.Value))
        { datFechaCajaFinal.Value = datFechaCajaInicial.Value; }
    }
    //
}
//}
